﻿IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'ReportPedidos')
	BEGIN
		DROP  Procedure  ReportPedidos
	END

GO

CREATE Procedure ReportPedidos

	(
		@IdDepartamento int,
		@IdCliente int,
		@Estado int,
		@FechaMin varchar(50),
		@FechaMax varchar(50),
		@Top int
	)

AS

BEGIN

SET NOCOUNT ON

	DECLARE @Fecha1 datetime
	DECLARE @Fecha2 datetime
	
	SET @Fecha1 = convert(datetime,@FechaMin,120)
	SET @Fecha2 = convert(datetime,@FechaMax,120)
	
	IF @Top = 0 SET @Top = 1000
	
	IF	@IdCliente = 0
	BEGIN
		IF @Estado = 100
		BEGIN
			SELECT 
			TOP(@Top) 
			P.[IdPedido],
			C.Nombre + ' ' + C.Apellidos AS 'Cliente',
			D.[Nombre] AS 'Departamento',
			P.[Fecha],
			CASE
				WHEN P.[Documento] = 0 THEN 'BOLETA'
				WHEN P.[Documento] = 1 THEN 'FACTURA'
			END AS 'Documento',
			B.Nombre AS 'Banco',
			CU.Numero AS 'Cuenta',
			P.[NroOperacion],
			P.[FechaOperacion],
			CASE
				WHEN P.[Estado] = 0 THEN 'En Espera'
				WHEN P.[Estado] = 1 THEN 'Atendido'
				WHEN P.[Estado] = 2 THEN 'Cancelado'
			END AS 'Estado',
			ISNULL(P.[Autorizador],'') AS 'Autorizador',
			SUM(DP.Cantidad * DP.Precio) AS 'Monto'
			FROM [Pedido] AS P
			INNER JOIN Departamento AS D ON P.IdDepartamento = D.IdDepartamento
			INNER JOIN Cliente AS C ON P.IdCliente = C.IdCliente
			INNER JOIN Cuenta AS CU ON P.IdCuenta = CU.IdCuenta
			INNER JOIN Banco AS B ON CU.IdBanco = B.IdBanco
			INNER JOIN DetallePedido AS DP ON DP.IdPedido = P.IdPedido
			WHERE P.[IdDepartamento] = @IdDepartamento AND 
			(P.[Fecha] BETWEEN @Fecha1 AND @Fecha2)
			GROUP BY P.[IdPedido], P.[Fecha], C.Nombre, C.Apellidos, D.Nombre,
			B.Nombre, CU.Numero, P.[Documento], P.[Estado], P.[NroOperacion], 
			P.[FechaOperacion], P.[Autorizador]
			ORDER BY P.[Fecha] DESC
		END	
		ELSE
		BEGIN
			SELECT 
			TOP(@Top) 
			P.[IdPedido],
			C.Nombre + ' ' + C.Apellidos AS 'Cliente',
			D.[Nombre] AS 'Departamento',
			P.[Fecha],
			CASE
				WHEN P.[Documento] = 0 THEN 'BOLETA'
				WHEN P.[Documento] = 1 THEN 'FACTURA'
			END AS 'Documento',
			B.Nombre AS 'Banco',
			CU.Numero AS 'Cuenta',
			P.[NroOperacion],
			P.[FechaOperacion],
			CASE
				WHEN P.[Estado] = 0 THEN 'En Espera'
				WHEN P.[Estado] = 1 THEN 'Atendido'
				WHEN P.[Estado] = 2 THEN 'Cancelado'
			END AS 'Estado',
			ISNULL(P.[Autorizador],'') AS 'Autorizador',
			SUM(DP.Cantidad * DP.Precio) AS 'Monto'
			FROM [Pedido] AS P
			INNER JOIN Departamento AS D ON P.IdDepartamento = D.IdDepartamento
			INNER JOIN Cliente AS C ON P.IdCliente = C.IdCliente
			INNER JOIN Cuenta AS CU ON P.IdCuenta = CU.IdCuenta
			INNER JOIN Banco AS B ON CU.IdBanco = B.IdBanco
			INNER JOIN DetallePedido AS DP ON DP.IdPedido = P.IdPedido
			WHERE P.[IdDepartamento] = @IdDepartamento AND 
			(P.[Fecha] BETWEEN @Fecha1 AND @Fecha2) AND
			P.[Estado] = @Estado
			GROUP BY P.[IdPedido], P.[Fecha], C.Nombre, C.Apellidos, D.Nombre,
			B.Nombre, CU.Numero, P.[Documento], P.[Estado], P.[NroOperacion], 
			P.[FechaOperacion], P.[Autorizador]
			ORDER BY P.[Fecha] DESC
		END
	END
	ELSE 
	BEGIN
		IF @Estado = 100
		BEGIN
			SELECT 
			TOP(@Top) 
			P.[IdPedido],
			C.Nombre + ' ' + C.Apellidos AS 'Cliente',
			D.[Nombre] AS 'Departamento',
			P.[Fecha],
			CASE
				WHEN P.[Documento] = 0 THEN 'BOLETA'
				WHEN P.[Documento] = 1 THEN 'FACTURA'
			END AS 'Documento',
			B.Nombre AS 'Banco',
			CU.Numero AS 'Cuenta',
			P.[NroOperacion],
			P.[FechaOperacion],
			CASE
				WHEN P.[Estado] = 0 THEN 'En Espera'
				WHEN P.[Estado] = 1 THEN 'Atendido'
				WHEN P.[Estado] = 2 THEN 'Cancelado'
			END AS 'Estado',
			ISNULL(P.[Autorizador],'') AS 'Autorizador',
			SUM(DP.Cantidad * DP.Precio) AS 'Monto'
			FROM [Pedido] AS P
			INNER JOIN Departamento AS D ON P.IdDepartamento = D.IdDepartamento
			INNER JOIN Cliente AS C ON P.IdCliente = C.IdCliente
			INNER JOIN Cuenta AS CU ON P.IdCuenta = CU.IdCuenta
			INNER JOIN Banco AS B ON CU.IdBanco = B.IdBanco
			INNER JOIN DetallePedido AS DP ON DP.IdPedido = P.IdPedido
			WHERE P.[IdDepartamento] = @IdDepartamento AND 
			(P.[Fecha] BETWEEN @Fecha1 AND @Fecha2) AND
			P.[IdCliente] = @IdCliente
			GROUP BY P.[IdPedido], P.[Fecha], C.Nombre, C.Apellidos, D.Nombre,
			B.Nombre, CU.Numero, P.[Documento], P.[Estado], P.[NroOperacion], 
			P.[FechaOperacion], P.[Autorizador]
			ORDER BY P.[Fecha] DESC
		END	
		ELSE
		BEGIN
			SELECT 
			TOP(@Top) 
			P.[IdPedido],
			C.Nombre + ' ' + C.Apellidos AS 'Cliente',
			D.[Nombre] AS 'Departamento',
			P.[Fecha],
			CASE
				WHEN P.[Documento] = 0 THEN 'BOLETA'
				WHEN P.[Documento] = 1 THEN 'FACTURA'
			END AS 'Documento',
			B.Nombre AS 'Banco',
			CU.Numero AS 'Cuenta',
			P.[NroOperacion],
			P.[FechaOperacion],
			CASE
				WHEN P.[Estado] = 0 THEN 'En Espera'
				WHEN P.[Estado] = 1 THEN 'Atendido'
				WHEN P.[Estado] = 2 THEN 'Cancelado'
			END AS 'Estado',
			ISNULL(P.[Autorizador],'') AS 'Autorizador',
			SUM(DP.Cantidad * DP.Precio) AS 'Monto'
			FROM [Pedido] AS P
			INNER JOIN Departamento AS D ON P.IdDepartamento = D.IdDepartamento
			INNER JOIN Cliente AS C ON P.IdCliente = C.IdCliente
			INNER JOIN Cuenta AS CU ON P.IdCuenta = CU.IdCuenta
			INNER JOIN Banco AS B ON CU.IdBanco = B.IdBanco
			INNER JOIN DetallePedido AS DP ON DP.IdPedido = P.IdPedido
			WHERE P.[IdDepartamento] = @IdDepartamento AND 
			(P.[Fecha] BETWEEN @Fecha1 AND @Fecha2) AND
			P.[IdCliente] = @IdCliente AND P.[Estado] = @Estado
			GROUP BY P.[IdPedido], P.[Fecha], C.Nombre, C.Apellidos, D.Nombre,
			B.Nombre, CU.Numero, P.[Documento], P.[Estado], P.[NroOperacion], 
			P.[FechaOperacion], P.[Autorizador]
			ORDER BY P.[Fecha] DESC
		END
	END
	
	SET NOCOUNT OFF

END

GO


GRANT EXEC ON ReportPedidos TO PUBLIC

GO


